#ifndef __2048_H__
#define __2048_H__
#endif //2048.h


#define _CRT_SECURE_NO_WARNINGS
#include<time.h> 
#include<stdio.h> 
#include<stdlib.h> 
#include<stdbool.h>

#ifdef _WIN32
/* 包含Windows平台相关函数，包括控制台界面清屏及光标设定等功能 */
#include<io.h>
#include<conio.h>
#include<windows.h>
#include<direct.h>
#include<Shlobj.h>

#else
/* 包含Linux平台相关函数，包括控制台界面清屏及光标设定等功能 */
#include <unistd.h>
#include <bits/signum.h>
#include <termio.h>
#include<signal.h>
#include<limits.h>

#define KEY_CODE_UP    0x41
#define KEY_CODE_DOWN  0x42
#define KEY_CODE_RIGHT 0x43
#define KEY_CODE_LEFT  0x44
#define KEY_CODE_QUIT  0x71

struct termios old_config; /* linux下终端属性配置备份 */

#endif //Win32

						   //表格所代表的的行和列可自行更改
#define ROW 5
#define COL 5
#define MAX_PATH 260
char historyBest[MAX_PATH]; //历史最高记录文件的路径
int board[ROW][COL];     /* 界面数组 */
int score;           /* 游戏得分 */
int highest_score;   /* 游戏最高分 */
bool if_random; /* 是否需要生成随机数标志，1表示需要，0表示不需要 */
bool game_over;    /* 是否游戏结束标志，1表示游戏结束，0表示游戏 */
bool if_exit; /* 是否准备退出游戏，1表示是，0表示否 */
bool if_restart; /*是否重新开始游戏*/

				 //游戏处理函数
void InitGame();    /* 初始化游戏 */
void ClearScreen();    /* 清屏 */
void RefreshBoard();    /* 刷新界面显示 */
void InitBoard();     /*初始化棋盘*/
void PlayGame();    /* 游戏循环 */
void EndGame(int signal); /* 结束游戏 */

int ReadKeyboard(); /*读取键盘操作*/

					//方向移动函数
void LeftMove();
void RightMove();
void UpMove();
void DownMove();

//游戏检测函数
void GenerateRandPosition();    /* 在空的随机位置生成一个数2/4概率1:1 */
void CheckGameOver(); /* 检测是否输掉游戏，设定游戏结束标志 */
int GetEmptyCount();   /* 获取游戏面板上空位置数量 */